package project02.controller.message;

import java.util.logging.Logger;

import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
import org.slim3.util.BeanUtil;

import project02.cool.CustomValidator;
import project02.cool.Util;
import project02.dao.MessageDataDao;
import project02.model.MessageData;
import project02.model.UserInfo;

public class RegMsgController extends Controller {

    @SuppressWarnings("unused")
    private static final Logger logger = Logger.getLogger(RegMsgController.class.getName());

    private Util util = Util.getInstance();

    @Override
    public Navigation run() {

        UserInfo user = sessionScope("userInfo");

        if (!Validate()) {
            returnFrontPage();
            return forward("makeData.jsp");
        }

        if (!user.getPassword().equals(asString("pass"))) {
            returnFrontPage();
            requestScope("result", "パスワードが一致しません.");
            return forward("makeData.jsp");
        }

        String messageId = user.getUserId() + String.format("%04d", asInteger("year")) + String.format("%02d", asInteger("month")) + String.format("%02d", asInteger("date")) + asString("worh");

        if (!util.chkMsg(user.getUserId(), messageId)) {
            requestScope("result", "<script type=\"text/javascript\"> window.alert('すでに該当メッセージが登録されています.'); </script>");
            return forward("makeData.jsp");
        }

        MessageData entity = new MessageData();
        entity.setMessageId(messageId);
        entity.setUserId(user.getUserId());
        entity.setYear(String.format("%04d", asInteger("year")));
        entity.setMonth(String.format("%02d", asInteger("month")));
        entity.setDate(String.format("%02d", asInteger("date")));
        entity.setWorh(asString("worh"));
        entity.setMessage(asString("message"));

        MessageDataDao dao = new MessageDataDao();

        try {
            dao.makePersistentInTx(entity);
        } catch (Exception e) {
            requestScope("result", "<script type=\"text/javascript\"> window.alert('新規メッセージ登録に失敗しました。" + e.getMessage() + "; </script>");
            return forward("../");
        }

        requestScope("result", "<script type=\"text/javascript\"> window.alert('新規メッセージ登録処理を完了しました.'); </script>");

        return forward("../");

    }

    /**
     * バリデータ
     * @return バリデータ
     */
    private boolean Validate() {

        CustomValidator val = new CustomValidator(request);
        val.add("pass", val.required("パスワードを入力してください."));
        val.add("year", val.required("年は入力必須項目です."), val.integerType("年は数字を入力してください."));
        val.add("month", val.required("月は入力必須項目です."), val.integerType("月は数字を入力してください."));
        val.add("date", val.required("日は入力必須項目です."), val.integerType("日は数字を入力してください."));
        val.add("message", val.required("メッセージは入力必須項目です."));
        val.add("worh", val.required("出勤退勤区分は必須項目です."));

        return val.validate();
    }

    /**
     * 前画面の入力内容をリクエストパラメータに入れる(バリデータで前画面に戻る対応)
     */
    public void returnFrontPage() {

        MessageData bean = new MessageData();
        BeanUtil.copy(request, bean);
        requestScope("resultData", bean);
    }
}
